<?php
declare(strict_types=1);

if (!function_exists('env'))
{
    /**
     * Gets the value of an environment variable.
     *
     * @param string|null $key
     * @param mixed $default
     *
     * @return mixed
     */
    function env(string $key = null, $default = null)
    {
        if (!$key)
        {
            return $_SERVER;
        }

        $value = $_SERVER[$key] ?? false;
        if ($value === false)
        {
            return value($default);
        }

        switch (strtolower($value))
        {
            case 'on':
            case 'yes':
            case 'true':
            case '(true)':
                return true;
            case 'off':
            case 'no':
            case 'false':
            case '(false)':
                return false;
            case 'empty':
            case '(empty)':
                return '';
            case 'null':
            case '(null)':
                return null;
        }

        if (defined($value))
        {
            $value = constant($value);
        }

        return $value;
    }
}

if (!function_exists('value'))
{
    /**
     * Return the callback value
     *
     * @param mixed $value
     *
     * @return mixed
     */
    function value($value)
    {
        return $value instanceof Closure ? $value() : $value;
    }
}
